package case17

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func Test() {

	fmt.Println("🎯示例十七：路由与路由组")

	r := gin.Default()

	// 普通路由
	r.GET("/case1", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "case1"})
	})
	r.GET("/case11", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "case11"})
	})
	r.POST("/case111", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "case111"})
	})
	// 此外，还有一个可以匹配所有请求方法的Any方法如下：
	r.Any("/case1111", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "可以匹配所有请求方法的Any方法"})
	})
	// 为没有配置处理函数的路由添加处理程序，默认情况下它返回404代码
	r.NoRoute(func(c *gin.Context) {
		c.HTML(http.StatusNotFound, "views/404.html", nil)
	})

	// 路由组
	// 我们可以将拥有共同URL前缀的路由划分为一个路由组。习惯性一对{}包裹同组的路由，这只是为了看着清晰，你用不用{}包裹功能上没什么区别。
	userGroup := r.Group("/user")
	{
		userGroup.GET("/list", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/user/list"}) })
		userGroup.GET("/one", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/user/one"}) })
		userGroup.POST("/add", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/user/add"}) })

	}
	shopGroup := r.Group("/shop")
	{
		shopGroup.GET("/list", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/shop/list"}) })
		shopGroup.GET("/one", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/shop/one"}) })
		shopGroup.POST("/add", func(c *gin.Context) { c.JSON(200, gin.H{"message": "/shop/add"}) })

		// 嵌套路由组
		xx := shopGroup.Group("xx")
		xx.GET("/oo", func(c *gin.Context) { c.JSON(200, gin.H{"message": "嵌套路由组"}) })
	}

	r.Run(":60000")

	//路由原理
	//Gin框架中的路由使用的是httprouter https://github.com/julienschmidt/httprouter 这个库。
	//其基本原理就是构造一个路由地址的前缀树。

}
